package com.example.design.shejimoshi.action.state.状态机实现方式三状态模式;

import com.example.design.shejimoshi.action.state.状态机实现方式三状态模式.inter.IMario;
import com.example.design.shejimoshi.action.state.状态机实现方式三状态模式.inter.SmallMario;
import lombok.Getter;
import lombok.Setter;

/**
 * @Description 上帝类: 负责组装类和串联执行流程
 *
 * MarioStateMachine 和各个状态类之间是双向依赖关系。MarioStateMachine 依赖各个状态类是理所当然的，但是，反过来，
 * 各个状态类为什么要依赖 MarioStateMachine 呢？这是因为，各个状态类需要更新 MarioStateMachine 中的两个变量，score 和 currentState。
 * @date 2022/11/2 13:25
 * @Author liuzhihui
 * @Version 1.0
 */
@Setter
@Getter
public class MarioStateMachine {
    private int score;
    private IMario currentState;

    /**
     * 构造函数，初始化一个初始马里奥
     */
    public MarioStateMachine() {
        this.score = 0;
        this.currentState = new SmallMario(this);
    }

    /**
     * 遇到蘑菇
     */
    public void obtainMushRoom() {
        this.currentState.obtainMushRoom();
    }

    /**
     * 遇到斗篷
     */
    public void obtainCape() {
        this.currentState.obtainCape();
    }

    /**
     * 遇到火焰
     */
    public void obtainFireFlower() {
        this.currentState.obtainFireFlower();
    }

    /**
     * 遇到怪兽
     */
    public void meetMonster() {
        this.currentState.obtainMonster();
    }
}
